|
DZÇÃÉeÉNÉjÉJÉãÉmÅ[ÉgÇ≈ÇÕÅAMac OS 8.6 Ç≈ì±ì¸Ç≥ÇÍÇΩ AppleScript ÇÃÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃÉÅÉJÉjÉYÉÄÇΔÅAMac OS X ópÇÃÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇçÏê¨Ç∑ÇÈÇΩÇflÇÃägí£ API DžǬǢǃê‡ñæÇµÇ‹Ç∑ÅB
DZÇÃÉeÉNÉjÉJÉãÉmÅ[ÉgÇÕÅAÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇäJî≠Ç∑ÇÈÉAÉvÉäÉPÅ[ÉVÉáÉìÉfÉxÉçÉbÉpå¸ÇØÇ…èëÇ©ÇÍǃǢNjÇ∑ÅB
[2004 îN 4 åé 8 ì˙]
|
ÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇΔÇÕâΩÇ©?
ÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÕ AppleScript åæåÍÇÃç\ï∂Çägí£Ç∑ÇÈÉÅÉJÉjÉYÉÄÇíÒãüǵNjÇ∑ÅBÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÕ Apple ÉCÉxÉìÉgÇèàóùÇ∑ÇÈLJÇÃÇΔÅAApple ÉCÉxÉìÉgÉfÅ[É^Çà coercion ÇçsǧLJÇÃÇ…ï™ófiÇ≈Ç´Ç‹Ç∑ÅBApple ÉCÉxÉìÉgÇèàóùÇ∑ÇÈÉ^ÉCÉvÇÃÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÕÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇ≈égÇÌÇÍǃǢÇÈ Apple ÉCÉxÉìÉgÉnÉìÉhÉâÇΔìØÇ∂óvóÃÇ≈é¿ëïǵNjÇ∑Ç™ÅAÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÕì¡éÍÇ»é¿çsä¬ã´Ç…íuÇ©ÇÍǃǢÇÈÇÃÇ≈ÅAApple ÉCÉxÉìÉgÉnÉìÉhÉâÇ‚ä¬ã´ïœêîÇê≥ǵÇ≠àµÇ§ÇΩÇflÇ…ÇÕÅAÇ≥ÇÁÇ…éüÇÃÉãÅ[É`ÉìÇé¿ëïÇµÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB
- ÉCÉxÉìÉgÉnÉìÉhÉâÇ‚ coercion ÉnÉìÉhÉâÉCÉìÉXÉgÅ[ÉãÅAÉÅÉÇÉäÇÃämï€ÅAÉOÉçÅ[ÉoÉãïœêîÇÃèÄîıǻǫÅAé¿çsÇ…ïKóvÇ»èâä˙âªçÏãΔ
- ÉXÉNÉäÉvÉeÉBÉìÉOã@î\ägí£ÉçÅ[ÉhÅ^ÉAÉìÉçÅ[ÉhÇÃÉ^ÉCÉ~ÉìÉOÇåàíËÇ∑ÇÈÉäÉtÉ@ÉåÉìÉXÉJÉEÉìÉgÇÃìOíÍ
- äeéÌÉnÉìÉhÉâÇÃçÌèúÅAçÏãΔóÃàÊÇÃâèúǻǫÇÃèIóπçÏãΔ
ÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡Ç…ÇÊǡǃÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍÇÈ Apple ÉCÉxÉìÉgÉnÉìÉhÉâÇΔ Apple ÉCÉxÉìÉgÉfÅ[É^ coercion ÉnÉìÉhÉâÇÕÅAàÍî ìIÇ…ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ≈égÇÌÇÍÇÈÉnÉìÉhÉâÇΔìØÇ∂ï˚ñ@Ç≈é¿ëïǵNjÇ∑ÅBÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇΔÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃà·Ç¢ÇÕÅAÉRÅ[ÉhÇÃÉpÉbÉPÅ[ÉWÇ≥ÇÍǃǢÇÈï˚ñ@ÇΔÅAé¿çsï˚ñ@Ç≈Ç∑ÅBDZÇÍÇ©ÇÁÅAÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃÉpÉbÉPÅ[ÉWÇΔé¿çsï˚ñ@DžǬǢǃè⁄ǵÇ≠ê‡ñæÇµÇ‹Ç∑ÅB
ÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃÉpÉbÉPÅ[ÉWâª
ÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÕ 2 í ÇËÇÃÉpÉbÉPÅ[ÉWÇ™ë∂ç›ÇµÇ‹Ç∑ÅB
- Mach-O å`éÆÇà Mac OS X ÉoÉìÉhÉã
Mach-O å`éÆÇÃÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÕ Mac OS X ÉoÉìÉhÉãÇΔǵǃÉpÉbÉPÅ[ÉWâªÇµÇ‹Ç∑ÅBMach-O å`éÆÇÃÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÕÅA(a) ÉoÉìÉhÉãÇà CFBundleSignature Ç™ osax Ç≈džÇÈÇ©ÅA(b) ÉoÉìÉhÉãñºÇÃägí£éqÇ™ .osax ÇÃÅAÇ¢Ç∏ÇÍÇ©ÇÃï˚ñ@Ç≈ì¡íËÇ≥ÇÍÇ‹Ç∑ÅB
- CFM å`éÆÇÃ
CarbonLib Ç®ÇÊÇ— InterfaceLib Ç…ÉäÉìÉNÇ≥ÇÍÇΩÉVÉìÉOÉãÉoÉCÉiÉä
CarbonLib Ç…ÉäÉìÉNÇ≥ÇÍÇΩÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃǛǙMac OS XÇ≈égópÇ≈Ç´Ç‹Ç∑ÅBCFM å`éÆÇÃÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÕÉtÉ@ÉCÉãÉ^ÉCÉvÇΔÉNÉäÉGÅ[É^ÉRÅ[ÉhÇ≈ì¡íËÇ≥ÇÍÇ‹Ç∑ÅBÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÕÉtÉ@ÉCÉãÉ^ÉCÉvÇ™ osax ÅAÉNÉäÉGÅ[É^ÉRÅ[ÉhÇÕîƒópìIÇ»íl (ascr ) Ç‹ÇΩÇÕ BNDL ÉäÉ\Å[ÉXÇ≈íËã`Ç≥ÇÍǃǢÇÈílÇ≈džǡǃLJǩNjǢNjÇπÇÒÅB
íçà”ÅF
InterfaceLib Ç…ÉäÉìÉNÇ≥ÇÍÇΩÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÕ Mac OS X Ç≈égópÇ≈Ç´Ç‹ÇπÇÒÅBCarbonLib Ç…ÉäÉìÉNÇ≥ÇÍÇΩÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÕ Mac OS 9 Ç≈à¿ëSÇ…égópÇ≈Ç´Ç‹ÇπÇÒÅB
|
êÊì™Ç…ñflÇÈ
ÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃèâä˙âª
ÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃèâä˙âªÉãÅ[É`ÉìÇ≈ÇÕÅAïKóvÇ»ÉnÉìÉhÉâÇÃÉCÉìÉXÉgÅ[ÉãÅAÉÅÉÇÉäÇÃämï€ÅAǪÇÃëºÇÃèÄîıèàóùÇçsǢNjÇ∑ÅBèâä˙âªÉãÅ[É`ÉìÇÕà»â∫ÇÃÇÊǧDžç\ê¨ÇµÇ‹Ç∑ÅB
Gestalt ÅAsysctl ǻǫÇégǡǃÅAé¿çsÇ…ïKóvÇ»ÉVÉXÉeÉÄÉäÉ\Å[ÉXÇÃë∂ç›ÇämîFǵNjÇ∑ÅBDZDZÇ≈ÇÕÉÅÉÇÉäÇÃämï€Ç‚é¿çsÇ…ïKóvÇ»ÉtÉ@ÉCÉãÇÃämîFLJçsǢNjÇ∑ÅB
- Apple ÉCÉxÉìÉgÉnÉìÉhÉâÇ‚ coercion ÉnÉìÉhÉâÇÉCÉìÉXÉgÅ[ÉãǵNjÇ∑ÅBÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃÉnÉìÉhÉâÇÕÉVÉXÉeÉÄÉfÉBÉXÉpÉbÉ`ÉeÅ[ÉuÉãÇ…ÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBÉäÉXÉg 1 Ç≈ÇÕÉVÉXÉeÉÄÉfÉBÉXÉpÉbÉ`ÉeÅ[ÉuÉãÇ…ÉnÉìÉhÉâÇÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈï˚ñ@Çè–âÓǵǃǢNjÇ∑ÅB
ÉäÉXÉg 1 ÉVÉXÉeÉÄÉfÉBÉXÉpÉbÉ`ÉeÅ[ÉuÉãÇ…ÉnÉìÉhÉâÇÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈ
|
Boolean isSysHandler = true;
anErr = AEInstallEventHandler( theAEEventClass, theAEEventID,
theHandlerUPP, refcon, isSysHandler);
anErr = AEInstallCoercionHandler( fromType, toType, theHandlerUPP,
refcon, fromTypeIsDesc, isSysHandler);
|
èdóvÅF
èâä˙âªÉãÅ[É`ÉìÇ™ noErr à»äOÇÃåãâ Çï‘ǵÇΩèÍçáÅAèIóπä÷êîÇÕåƒÇ—èoÇ≥ÇÍǻǢÇΩÇflÅAèâä˙âªä÷êîÇ™é¿çsǵÇΩèàóùÇÃÉNÉäÅ[ÉìÉAÉbÉvÇÕèâä˙âªä÷êîÇ™çsǧïKóvǙdžÇËÇ‹Ç∑ÅBì¡Ç…ÅAApple ÉCÉxÉìÉgÉnÉìÉhÉâÇÉCÉìÉXÉgÅ[ÉãǵÇΩNjNjécǵǃǮǢǃÇÕÇ»ÇËÇ‹ÇπÇÒÅB
|
- íËêîÇÃèâä˙âªÇ‚èâä˙âªÉãÅ[É`ÉìÉpÉâÉÅÅ[É^ÇÃï€ë∂ǻǫÅAǪÇÃëºÇÃèâä˙ê›íËÇçsǢNjÇ∑ÅB
- èâä˙âªÇ…é∏îsǵÇΩèÍçáÅAèâä˙âªÉãÅ[É`ÉìÇ≈é¿çsǵÇΩèàóùÇÃénññÇçsÇ¢ÅAìKêÿÇ»ÉGÉâÅ[ÉRÅ[ÉhÇï‘ǵNjÇ∑ÅBÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃëºÇÃÉãÅ[É`ÉìÇÕåƒÇ—èoÇ≥ÇÍÇ‹ÇπÇÒÅB
ÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃèâä˙âªÉãÅ[É`ÉìÇÕÉpÉbÉPÅ[ÉWï˚ñ@Ç…ÇÊǡǃÅAé¿ëïï˚ñ@Ç™àŸÇ»ÇËÇ‹Ç∑ÅBCFM å`éÆÇÃèÍçáÅACode Fragment ÇÃèâä˙âªÉãÅ[É`ÉìÇ™égópÇ≥ÇÍÇ‹Ç∑ÅBàÍï˚ÅAMach-O å`éÆÇÃèÍçáÅASAInitialize ÇΔǢǧÉãÅ[É`ÉìÇíËã`ǵǃÉGÉNÉXÉ|Å[ÉgÇµÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB
CFM å`éÆÇÃÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃèÍçáÇÕÅACode Fragment ÇÃèâä˙âªÉãÅ[É`ÉìÇ™åƒÇŒÇÍÇ‹Ç∑ÅBÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÕÅAèâä˙âªÉãÅ[É`Éìà»äOÇÃÇΔDZÇÎÇ≈é©ï™ÇÃÉäÉ\Å[ÉXÉtÉHÅ[ÉNÇäJÇ≠DZÇΔǙdžÇÍÇŒÅAèâä˙âªÉãÅ[É`Éìì‡Ç≈éÊìæÇµÇΩÉäÉ\Å[ÉXÉtÉ@ÉCÉãÇ÷ÇÃéQèΔÇÉOÉçÅ[ÉoÉãïœêîǻǫDžï€ë∂ǵNjÇ∑ÅBÉäÉXÉg 2 ÇÕ CFM å`éÆÇÃÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃèâä˙âªÉãÅ[É`ÉìÇÃó·Ç≈Ç∑ÅB
ÉäÉXÉg 2 CFM å`éÆÇÃÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃèâä˙âªÉãÅ[É`Éì
|
OSErr CFMSAInitialize(InitBlockPtr initBlkPtr) {
OSErr err;
...DZDZÇ≈èâä˙âªÇçsǧ...
return err;
}
|
ÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃèâä˙âªÉãÅ[É`ÉìÇ…ìnÇ≥ÇÍÇÈ initBlkPtr ÉpÉâÉÅÅ[É^ÇÕÅAÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃÉäÉ\Å[ÉXÉtÉ@ÉCÉãÇéQèΔÇ∑ÇÈÇΩÇflÇÃèÓïÒÇ™ä‹Ç‹ÇÍǃǢNjÇ∑ÅBèâä˙âªÉãÅ[É`Éìà»äOÇÃÉnÉìÉhÉâÇ≈é©ï™ÇÃÉäÉ\Å[ÉXÉtÉHÅ[ÉNÇäJÇ≠èÍçáÇÕÅAéQèΔèÓïÒÇÉOÉçÅ[ÉoÉãïœêîǻǫDžï€ë∂ǵǃǮǴNjÇ∑ÅBÉäÉXÉg 3 Ç≈ÇÕÉGÉCÉäÉAÉXÇÉOÉçÅ[ÉoÉãïœêîÇ…ï€ë∂ǵǃǢNjÇ∑ÅB
ÉäÉXÉg 3 CFM å`éÆÇÃÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃèâä˙âªÉãÅ[É`Éì
|
static AliasHandle gMyAdditionLocation;
OSErr CFMSAInitialize(InitBlockPtr initBlkPtr) {
OSErr err;
/* DZÇÃÉãÅ[É`Éìà»äOÇÃÇΔDZÇÎÇ≈é©ï™ÇÃÉäÉ\Å[ÉXÉtÉHÅ[ÉNÇäJÇ≠
DZÇΔǙdžÇÍÇŒÅAÉOÉçÅ[ÉoÉãïœêîÇ…ÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡
ÉtÉ@ÉCÉãÇ÷ÇÃéQèΔÇï€ë∂ǵNjÇ∑ÅB*/
err = NewAlias(NULL, initBlkPtr->fragLocator.u.onDisk.fileSpec,
&gMyAdditionLocation);
if (err == noErr) ...
return err;
}
|
Mach-O å`éÆÇÃÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÕ SAInitialize ÇΔåæÇ§ä÷êîÇÉGÉLÉXÉ|Å[ÉgÇµÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅBDZÇÃä÷êîÇÕÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡èâä˙âªéûÇ…åƒÇŒÇÍÇ‹Ç∑ÅBÉäÉXÉg 4 Ç≈ÇÕ Mach-O ÇÃèâä˙âªä÷êîÇÃàÍó·Çé¶ÇµÇ‹Ç∑ÅB
ÉäÉXÉg 4 Mach-O å`éÆÇÃÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃèâä˙âªä÷êî
|
OSErr SAInitialize(CFBundleRef additionBundle) {
OSErr err;
...DZDZÇ≈èâä˙âªÇçsǧ...
return err;
}
|
SAInitialize Çà additionBundle ÉpÉâÉÅÅ[É^ÇÕÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃÉoÉìÉhÉãÇéwǵNjÇ∑ÅBDZÇÃílÇégǡǃÅAÉoÉìÉhÉãì‡ÇÃÉäÉ\Å[ÉXÇ…ÉAÉNÉZÉXÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBDZÇÃílÇÉOÉçÅ[ÉoÉãïœêîǻǫDžï€ë∂Ç∑ÇÍÇŒÅAèâä˙âªéûà»äOÇÃÉnÉìÉhÉâÇ≈ÉoÉìÉhÉãì‡ÇÃÉäÉ\Å[ÉXÇ…ÉAÉNÉZÉXÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBadditionBundle ÇÕÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡Ç™ÉçÅ[ÉhÇ≥ÇÍǃǢÇÈä‘óLå¯Ç≈Ç∑ÇÃÇ≈ÅACFRetain ÇåƒÇ—èoÇ∑ïKóvÇÕdžÇËÇ‹ÇπÇÒÅB
CFM å`éÆÇÃÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃèÍçáÅACode Fragment ÇÃèâä˙âªÉãÅ[É`ÉìÇÃñºëOÇéwíËÇ∑ÇÈï˚ñ@ÇÕäJî≠ä¬ã´Ç…àÀë∂ǵNjÇ∑ÇÃÇ≈ÅAäJî≠ä¬ã´ÇÃê‡ñæèëÇÇ®ì«Ç›Ç≠ÇæÇ≥Ç¢ÅBCode Fragment ManagerÅACFM ÇÃèâä˙âªÉãÅ[É`ÉìÅAMach-O DžǬǢǃÇÕDZÇÃå„ÇÃéQçlï∂å£ÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB
êÊì™Ç…ñflÇÈ
ÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃèIóπ
èIóπÉãÅ[É`ÉìÇ≈ÇÕÅAÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇèIóπÇ≥ÇπÇÈÇΩÇflÇ…ïKóvÇ»èàóùÇçsǢNjÇ∑ÅBì¡Ç…ÅAéüÇÃèàóùÇåáÇ©Ç≥Ç∏Ç…çsǧïKóvǙdžÇËÇ‹Ç∑ÅB
- èâä˙âªÉãÅ[É`ÉìÇ≈ÉCÉìÉXÉgÅ[ÉãǵÇΩÉCÉxÉìÉgÉnÉìÉhÉâÇ‚ coercion ÉnÉìÉhÉâÇçÌèúÇ∑ÇÈ
- ÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡Ç≈äÑÇËìñǃÇΩÉÅÉÇÉäÇ‚ÉäÉ\Å[ÉXÇâèúÇ∑ÇÈ
ÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃèIóπÉãÅ[É`ÉìÇÕÅAAppleScript Ç™ÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇΔÇÃê⁄ë±ÇÉNÉçÅ[ÉYÇ∑ÇÈÇΔÇ´Ç…åƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅBDZÇÃÇÊǧǻê⁄ë±ÇÃÉNÉçÅ[ÉYÇÕÅAÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡Ç™ÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÉtÉHÉãÉ_Ç©ÇÁäOÇ≥ÇÍÇΩå„ÅAAppleScript Ç™éüÇ…èâä˙âªÇ≥ÇÍÇΩÉ^ÉCÉ~ÉìÉOÇ≈Ç∑ÅB
ÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃÉçÅ[ÉhÇ‚ÉAÉìÉçÅ[ÉhÇÕ gdut ÉCÉxÉìÉgÇ™éÛóùÇ≥ÇÍÇΩÉ^ÉCÉ~ÉìÉOÇ≈çsÇÌÇÍÇ‹Ç∑ÅBAppleScript ÇÕÉRÉìÉ|Å[ÉlÉìÉgÇ÷ÇÃê⁄ë±Ç™äJÇ¢ÇΩå„ÅAÉXÉNÉäÉvÉgÇÉRÉìÉpÉCÉãÇ∑ÇÈëOÇ…ÉçÅ[ÉhÇ‚ÉAÉìÉçÅ[ÉhÇçsǢNjÇ∑ÅB
Mac OS 9 Ç≈ÇÕÅAÉçÅ[ÉhÇΔÉAÉìÉçÅ[ÉhÇÕǪÇÃÇΔÇ´Ç…ÇæÇØçsÇÌÇÍÇ‹Ç∑ÅBÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃèIóπéûÇ‚ÉVÉXÉeÉÄÇÃèIóπéûÇ≈LJÅAã@î\í«â¡ÇÃÉçÅ[ÉhfiÇΔÉAÉìÉçÅ[ÉhÇÕçsÇÌÇÍÇ‹ÇπÇÒÅBDZÇÃÇΩÇflèIóπä÷êîÇ™åƒÇ—èoÇ≥ÇÍÇÈÇÃÇÕÅAÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡Ç™ÉtÉHÉãÉ_Ç©ÇÁçÌèúÇ≥ÇÍÇΩå„ÅAéüÇà gdut ÉCÉxÉìÉgÇÃÇΔÇ´Ç…Ç»ÇËÇ‹Ç∑ÅB
Mac OS X Ç≈ÇÕÅAÉAÉvÉäÉPÅ[ÉVÉáÉìèIóπéûDžLJÉAÉìÉçÅ[ÉhÇ™çsÇÌÇÍÇ‹Ç∑ÅBÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃÉAÉìÉçÅ[ÉhÇÕÅAã@î\í«â¡ÇÉçÅ[ÉhǵÇΩÉvÉçÉZÉXÇ≤ÇΔÇ…ï ÅXÇ…çsǧïKóvǙdžÇÈÇΩÇflÅAã@î\í«â¡ÇäÆëSÇ…çÌèúÇ∑ÇÈÇ…ÇÕÅAÉtÉHÉãÉ_Ç©ÇÁçÌèúǵÇΩå„ÅAï°êîÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇ… gdut ÉCÉxÉìÉgÇëóêMÇµÇ»ÇØÇÍnjǻÇÁǻǢDZÇΔLJdžÇËÇ‹Ç∑ÅBMac OS 9 Ç≈ÇÕÅAÇ«ÇÍÇ© 1 ǬÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇ… gdut ÉCÉxÉìÉgÇëóêMÇ∑ÇÈDZÇΔÇ≈çÌèúÇ≥ÇÍÇ‹Ç∑ÅB
ÉäÉXÉg 5 ÇÕÅAÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃèIóπÉãÅ[É`ÉìÇÃàÍó·Ç≈Ç∑ÅBÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡Ç™ CFM å`éÆÇÃÉoÉCÉiÉäÇΔǵǃíÒãüÇ≥ÇÍǃǢÇÈèÍçáÇÕÅACFM ÇÃèIóπÉãÅ[É`ÉìÇÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃèIóπÉãÅ[É`ÉìÇ…ê›íËÇµÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅBMach-O å`éÆÇÃÉoÉCÉiÉäÇÕÅAÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡Ç™ïsóvDžǻǡÇΩÇÁÅAAppleScript Ç…ÇÊǡǃåƒÇ—èoÇ≥ÇÍÇΩ SATerminate ÇÉGÉNÉXÉ|Å[ÉgǵNjÇ∑ÅB
ÉäÉXÉg 5 ÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃèIóπÉãÅ[É`ÉìÇÃó·
|
void SATerminate(void) {
AERemoveEventHandler(theAEEventClass,
theAEEventID, gTheHandler, true);
DisposeAEEventHandlerUPP(gTheHandler);
...ǪÇÃëºÇÃèIóπçÏãΔ...
}
|
CFM å`éÆÇÃÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃèÍçáÅAèIóπÉãÅ[É`ÉìÇÃê›íËï˚ñ@ÇÕäJî≠ä¬ã´Ç…ÇÊǡǃàŸÇ»ÇËÇ‹Ç∑ÇÃÇ≈ÅAè⁄ǵÇ≠ÇÕäJî≠ä¬ã´ÇÃê‡ñæèëÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅBCFM ÉRÅ[ÉhÅACFM ÇÃèâä˙âªÉãÅ[É`ÉìÅAÉoÉìÉhÉãéQèΔÅAMach-O ÇÃÉoÉìÉhÉãå`éÆÇ…ǬǢǃÇÕÅADZÇÃãLéñÇÃç≈å„ÇÃéQçlï∂å£ÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB
ÉäÉtÉ@ÉåÉìÉXÉJÉEÉìÉg
AppleScript Ç™ÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÉAÉìÉçÅ[ÉhÇ∑ÇÈç€ÅAÇ‹Ç∏ÅAǪÇÃÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡Ç…ñ‚Ç¢çáÇÌÇπÇǵǃÅAÇ‹Çæé¿çsíÜÇÃã@î\í«â¡Ç÷ÇÃåƒÇ—èoǵǙdžÇÈǩǫǧǩÇí≤Ç◊Ç‹Ç∑ÅBdžÇÈèÍçáÇÕÅAã@î\í«â¡ÇÃÉAÉìÉçÅ[ÉhÇÕà¿ëSÇ≈ÇÕǻǢÇΩÇflÅAÉAÉìÉçÅ[ÉhÇÕéÊÇËè¡Ç≥ÇÍÇÈÇ©ÅAåƒÇ—èoǵǙäÆóπÇ∑ÇÈÇ‹Ç≈âÑä˙Ç≥ÇÍÇ‹Ç∑ÅB
ÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÕÅAåªç›ÇÃé¿çsèÛãµÇÅAéüÇÃÇ«ÇøÇÁÇ©ÇÃï˚ñ@Ç≈ AppleScript Ç…ì`ǶNjÇ∑ÅBCFM ÉxÅ[ÉXÇÃÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÕÅAgAdditionReferenceCount ÇΔǢǧñºëOÇÃÉOÉçÅ[ÉoÉãïœêîéQèΔÇÉGÉNÉXÉ|Å[ÉgǵNjÇ∑ÅBMach-O ÉxÅ[ÉXÇÃÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÕÅASAIsBusy ÇΔǢǧñºëOÇÃÉãÅ[É`ÉìÇÉGÉNÉXÉ|Å[ÉgǵNjÇ∑ÅBCFM ã@î\í«â¡Ç…ÇÊǡǃÉGÉNÉXÉ|Å[ÉgÇ≥ÇÍÇÈ gAdditionReferenceCount ÇÃílÇÕÅAÉäÉXÉg 6 Ç…é¶Ç∑ SAIsBusy ÉãÅ[É`ÉìÇÃó·Ç≈égÇÌÇÍǃǢÇÈÇÃÇΔìØÇ∂ï˚ñ@Ç≈ AppleScript Ç…ÇÊǡǃégÇÌÇÍÇ‹Ç∑ÅBäÓñ{ìIÇ…ÇÕÅAgAdditionReferenceCount Ç™É[Éçà»äOÇÃèÍçáÅAǪÇÃÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÕâΩÇÁÇ©ÇÃåƒÇ—èoǵÇäÆóπÇ∑ÇÈÉvÉçÉZÉXDždžÇÈÇΔå©Ç»Ç≥ÇÍÅAÉAÉìÉçÅ[ÉhÇ≥ÇÍÇÈDZÇΔÇÕdžÇËÇ‹ÇπÇÒÅB
ÉäÉXÉg 6 ÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡Çà SAIsBusy ÉãÅ[É`ÉìÇÃó·
|
UInt32 gAdditionReferenceCount = 0;
Boolean SAIsBusy(void) {
return (gAdditionReferenceCount != 0);
}
|
Ç∑Ç◊ǃÇà Apple ÉCÉxÉìÉgÉnÉìÉhÉâÇΔ Apple ÉCÉxÉìÉgÉfÅ[É^ coercion ÉnÉìÉhÉâÇÃì‡ë§Ç≈ÇÕÅAé¿çséûÇ… gAdditionReferenceCount Ç 1 ǬëùǂǵÅAÉnÉìÉhÉâÇ™ñflÇÈíºëOÇ…ílÇ 1 Ǭå∏ÇÁǵNjÇ∑ÅBÉäÉXÉg 7 ÇÕìTå^ìIÇ»ÉnÉìÉhÉâÉãÅ[É`ÉìÇÃé¿ëïó·Ç≈Ç∑ÅB
ÉäÉXÉg 7 gAdditionReferenceCount Çä«óùÇ∑ÇÈìTå^ìIÇ»ÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÉnÉìÉhÉâÉãÅ[É`Éì
|
UInt32 gAdditionReferenceCount = 0;
....
OSErr MyEventHandler(const AppleEvent *ev,
AppleEvent *reply,
long refcon) {
OSErr err;
/* é¿çséûÇÕÉäÉtÉ@ÉåÉìÉXÉJÉEÉìÉgÇëùǂǵNjÇ∑ */
gAdditionReferenceCount++;
...ÉnÉìÉhÉâÇÃé¿ëïÉRÅ[Éh...
/* èIóπíºëOÇ…ÉäÉtÉ@ÉåÉìÉXÉJÉEÉìÉgÇå∏ÇÁǵNjÇ∑ */
--gAdditionReferenceCount;
return err;
}
|
êÊì™Ç…ñflÇÈ
ǪÇÃëº
Mac OS X ÇÃé¿çsä¬ã´
Mac OS X ÇÃé¿çsä¬ã´ÇÃèÍçáÅAÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÕ AppleScript Ç…ê⁄ë±ÇµÇƒÇ¢ÇÈÉAÉvÉäÉPÅ[ÉVÉáÉìÇ≤ÇΔÇ…ÅAï ÅXÇ…ÉçÅ[ÉhÇ≥ÇÍÇ‹Ç∑ÅBåãâ ÇΔǵǃÅAàÍìxÇ…àŸÇ»ÇÈï°êîÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìDžǮǢǃÅAÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃëΩÇ≠ÇÃÉCÉìÉXÉ^ÉìÉXÇ™äJÇ¢ÇΩèÛë‘DžǻǡǃǢÇÈDZÇΔÇîOì™Ç…íuǴǻǙÇÁÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡Çê›åvÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBåãâ ÇΔǵǃÅAÉvÉäÉìÉ^Ç‚ÉVÉäÉAÉãÉ|Å[ÉgǻǫÇà 1 ǬÇÃÉäÉ\Å[ÉXÇã§óLÇ∑ÇÈÇÊǧDžê›åvÇ≥ÇÍǃǢÇÈèÍçáÅAÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ä‘Ç…ÇÕí«â¡ÇÃÉRÅ[ÉhÇ™ëÂó Ç…ïKóvÇ…Ç»ÇÈDZÇΔǙdžÇËÇ‹Ç∑ÅB
ÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÉoÉìÉhÉãÉäÉ\Å[ÉXÇÃéÊìæï˚ñ@
Mach-O ÉoÉìÉhÉãå`éÆÇ≈èëÇ©ÇÍǃǢÇÈÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÕÅAÉoÉìÉhÉãì‡ÇÃÉäÉ\Å[ÉXÇ‚ÉtÉ@ÉCÉãÇ…ÉAÉNÉZÉXÇ∑ÇÈDZÇΔǙdžÇËÇ‹Ç∑ÅBDZÇÃèÍçáÅAÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÕÅASAInitialize Ç…ìnÇ≥ÇÍÇΩ CFBundleRef ÇÃÉRÉsÅ[ÇÉLÉÉÉbÉVÉÖÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅB
CFBundleRef gMyAdditionBundle;
OSErr SAInitialize(CFBundleRef additionBundle) {
/* ÉnÉìÉhÉâì‡Ç≈ÉoÉìÉhÉãì‡ÇÃÉäÉ\Å[ÉXÇ…ÉAÉNÉZÉXÇ∑ÇÈèÍçáÇÕ
DZDZÇ≈ÉoÉìÉhÉãÇ÷ÇÃÉäÉtÉ@ÉåÉìÉXÇï€ë∂ǵNjÇ∑ */
gMyAdditionBundle = additionBundle;
....
|
ÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡Ç≈ÇÕÅAìnÇ≥ÇÍÇΩÉoÉìÉhÉãéQèΔÇ…ëŒÇµÇƒ CFRetain ÇåƒÇ—èoÇ∑ïKóvÇÕdžÇËÇ‹ÇπÇÒÅBÉoÉìÉhÉãéQèΔÇÕÉXÉNÉäÉvÉeÉBÉìÉOã@î\ägí£Ç™äJǢǃǢÇÈå¿ÇËÅiSATerminate Ç™åƒÇ—èoÇ≥ÇÍÇÈÇ‹Ç≈ÅjóLå¯Ç≈Ç∑ÅB
ÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃÉoÉìÉhÉãì‡ÇÃÉäÉ\Å[ÉXÇ÷ÇÃÉAÉNÉZÉXï˚ñ@DžǬǢǃÇÕÅADZÇÃãLéñÇÃç≈å„ÇÃéQçlï∂å£ÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB
ÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÉäÉ\Å[ÉXÉtÉ@ÉCÉãÇÃéÊìæï˚ñ@
íPàÍÇÃÉtÉ@ÉCÉã CFM ÉoÉCÉiÉäÇΔǵǃíÒãüÇ≥ÇÍǃǢÇÈÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÕÅAǪÇÃÉnÉìÉhÉâÇà 1 ǬÇé¿çsǵǃǢÇÈä‘Ç…ÉäÉ\Å[ÉXÉtÉHÅ[ÉNÇ÷ÇÃÉAÉNÉZÉXÇ™ïKóvÇΔÇ»ÇÈDZÇΔǙdžÇËÇ‹Ç∑ÅBDZÇÍÇçsǧÇΩÇflÇ…ÅAÉfÉBÉXÉNè„ÇÃÉtÉ@ÉCÉãà íuÇÃéQèΔÇÅAǪÇÃèâä˙âªÉãÅ[É`Éìì‡Ç…ï€ë∂ǵǃǮÇ≠ïKóvǙdžÇËÇ‹Ç∑ÅBå„Ç≈ÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡Ç™Ç±ÇÃÉtÉ@ÉCÉãì‡ÇÃÉäÉ\Å[ÉXÇ…ÉAÉNÉZÉXÇ∑ÇÈïKóvÇ™ê∂Ç∂ÇÈÇΔÅADZÇÃéQèΔÇégǡǃÉäÉ\Å[ÉXÉtÉHÅ[ÉNÇäJÇ´ÅAïKóvÇ»ÉfÅ[É^ÇéÊÇËèoÇ∑DZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
Code Fragment Manager ÇÕÅADZÇÃèâä˙âªÉãÅ[É`ÉìÇåƒÇ—èoÇ∑ëOÇ…ÅAèâä˙âªÉãÅ[É`ÉìÇ…ìnÇ≥ÇÍÇΩ CFragInitBlock ì‡ÇÃÉtÉ@ÉCÉãéwíËÉåÉRÅ[ÉhÅiFSSpec ÅjÇ÷ÇÃÉ|ÉCÉìÉ^Çê›íËǵNjÇ∑ÅBÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÕÅADZÇÃílÇå„Ç≈égópÇ∑ÇÈÇΩÇflÇ…ÉOÉçÅ[ÉoÉãïœêîÇ…ÉLÉÉÉbÉVÉÖǵǃǮÇ≠DZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
AliasHandle gMyAdditionLocation;
OSErr ConnectionInitializationRoutine(InitBlockPtr initBlkPtr) {
OSErr err;
/* å„íˆÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃÉäÉ\Å[ÉXÉtÉ@ÉCÉãÇïKóvÇΔÇ∑ÇÈ
èÍçáÇÕDZDZÇ≈ÉtÉ@ÉCÉãÇà FSSpec ÇÉOÉçÅ[ÉoÉãïœêîÇ…ï€ë∂ǵNjÇ∑ÅB*/
err = NewAlias(NULL,
initBlkPtr->fragLocator.u.onDisk.fileSpec,
&gMyAdditionLocation);
if (err == noErr) {
|
ÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡Ç™ÉnÉìÉhÉâì‡Ç≈äJÇ¢ÇΩÉäÉ\Å[ÉXÉtÉ@ÉCÉãÇÕÅAÉnÉìÉhÉâèIóπéûÇ‹Ç≈Ç…ÉNÉçÅ[ÉYÇµÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅBÇ‹ÇΩÅAÉnÉìÉhÉâì‡Ç≈ÉäÉ\Å[ÉXÉtÉ@ÉCÉãÇäJÇ≠èÍçáÅAÉäÉ\Å[ÉXÉ`ÉFÅ[ÉìÇïœçXǵǻǢÇÊǧǻçHïvÇ™ïKóvÇ≈Ç∑ÅBà»â∫ÇÃó·Ç≈ÇÕÅAÉnÉìÉhÉâì‡Ç≈ÉäÉ\Å[ÉXÉtÉ@ÉCÉãÇäJÇ´ÅAÉäÉ\Å[ÉXÉ`ÉFÅ[ÉìÇÃèÛë‘Çï€ë∂ǵǃǢNjÇ∑ÅB
SInt16 oldResFile;
SInt16 osaxResRef;
FSRef ref;
oldResFile = CurResFile();
osaxResRef = FSOpenResFile( &ref, fsRdPerm );
// DZDZÇ≈ÉäÉ\Å[ÉXÇÃì«Ç›çûǛǻǫÇÃèàóùÇçsǧ
CloseResFile( osaxResRef );
UseResFile( oldResFile );
|
íçà”ÅF
ÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃÉäÉ\Å[ÉXÉtÉ@ÉCÉãÇì¡íËÇ∑ÇÈÇΩÇflÇÃÉtÉ@ÉCÉãéQèΔî‘çÜÇÕÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÇÃèâä˙âªÉãÅ[É`ÉìÇ≈éÊìæÇµÇ‹Ç∑ÅB
|
ÉçÅ[ÉJÉãÉVÉXÉeÉÄÇΔÉäÉÇÅ[ÉgÉVÉXÉeÉÄÇ©ÇÁÇÃÉCÉxÉìÉg
ÉäÉÇÅ[ÉgÉVÉXÉeÉÄÇ©ÇÁÇÃÉCÉxÉìÉgÇåüèoǵǃãëî€Ç∑ÇÈǩǫǧǩÇÕǪÇÍǺÇÍÇÃÉXÉNÉäÉvÉeÉBÉìÉOã@î\í«â¡ÉnÉìÉhÉâÇ™åàíËǵNjÇ∑ÅBÉnÉìÉhÉâÇÕÅAéÛêMǵÇΩÉCÉxÉìÉgÇ…ä‹Ç‹ÇÍÇÈ keyEventSourceAttr ëÆê´ÇÉ`ÉFÉbÉNǵǃÅAǪÇÃÉCÉxÉìÉgÇÃÉ\Å[ÉXÇîªífÇ≈Ç´Ç‹Ç∑ÅBÉäÉÇÅ[ÉgÉVÉXÉeÉÄÇ©ÇÁÇÃÉCÉxÉìÉgÇÕÅAkAERemoteProcess ÇΔǢǧëÆê´ílÇéùÇøÇ‹Ç∑ÅB
DescType sourceAttr;
DescType actualType;
Size actualSize;
anErr = AEGetAttributePtr( eventPtr, keyEventSourceAttr, typeType,
&actualType, &sourceAttr,
sizeof( sourceAttr ), &actualSize);
if ( sourceAttr == kAERemoteProcess ) {
return errAEEventNotHandled;
}
|
êÊì™Ç…ñflÇÈ
éQçlï∂å£
êÊì™Ç…ñflÇÈ
ïœçXóöó
2003 îN 4 åé 16 ì˙
|
ÉTÉìÉvÉãÉRÅ[ÉhÇÉ_ÉEÉìÉçÅ[Éh
|
êÊì™Ç…ñflÇÈ
É_ÉEÉìÉçÅ[Éh

|
Xcode ÉvÉçÉWÉFÉNÉgÇ…égópÇ∑ÇÈÅAÉXÉPÉãÉgÉìÉXÉNÉäÉvÉeÉBÉìÉOí«â¡ÉRÅ[Éh (7K)
|
É_ÉEÉìÉçÅ[Éh
|
êÊì™Ç…ñflÇÈ
|